<?php

if (!defined('BASEPATH'))
    exit('No direct script access allowed');

/**
 * Controller album
 *
 * @author luubk
 * @since Nov 1, 2012 - 6:25:21 AM
 */
class Album extends MY_Controller {

    function __construct() {
        parent::__construct();
        $this->load->model('m_album');
        $this->load->model('m_album_photo');
        $this->load->model('m_album_category');
        $this->load->model('m_album_category_relation');
    }

    function index($del_noti = '') {
        $this->load->library('pagination');
        $offset = $this->input->get('offset', 0);
        $cate = $this->input->get('cate') ? $this->input->get('cate') : -1;
        $status = $this->input->get('status') !== FALSE ? $this->input->get('status') : -1;
        $limit = 20;

        $where = array();
        if ($cate != -1)
            $where['album_category.cate_id'] = $cate;
        if ($status != -1)
            $where['album.album_status'] = $status;

        $url = current_url() . "?cate=$cate&status=$status";
        $config = array();
        $config['base_url'] = $url;
        $config['total_rows'] = count($this->m_album->multi_select($where));
        $config['per_page'] = $limit;
        $config['query_string_segment'] = 'offset';
        $config['page_query_string'] = TRUE;

        $this->pagination->initialize($config);
        $this->set_var('paging', $this->pagination->create_links());

        $this->_plugins[] = "jquery_ui/js";
        $this->_plugins[] = "jquery_ui/css/Aristo";

        $this->set_var('items', $this->m_album->multi_select($where, 'album.album_id DESC', $limit, $offset));
        $this->set_var('category', $this->m_album_category->multi_select());
        $this->set_var('cate_select_box', $this->_cate_select_box($this->data['category'], $cate));
        $this->set_var('title', 'Danh sách album');
        if ($del_noti != '')
            $this->set_var('del_noti', 'Xóa album có ID: ' . $del_noti);
        $this->view('album/index');
    }

    private function _cate_tree($category = array(), $display = '', $in_cate = array(), $parent = 0) {
        if ($display == 'input')
            $tree = '<ul style="list-style: none">';
        else
            $tree = '<ul>';
        foreach ($category as $cate) {
            if ($cate['cate_parent'] == $parent) {
                $tree .= '<li>';
                if ($display == 'input') {
                    $tree .= "<input type='checkbox' name='album_cate[]' value='" . $cate['cate_id'] . "'";
                    if (in_array($cate['cate_id'], $in_cate))
                        $tree .= ' checked="checked"';
                    $tree .= "/>";
                }
                $tree .= $cate['cate_name'];
                $tree .= '</li>';
                $tree .= $this->_cate_tree($category, $display, $in_cate, $cate['cate_id']);
            }
        }
        $tree .= '</ul>';
        if ($tree == '<ul></ul>')
            return '';
        return $tree;
    }

    private function _cate_select_box($category = array(), $sl_cate = '', $parent = 0, $space = '') {
        $tree = '';
        foreach ($category as $cate) {
            if ($cate['cate_parent'] == $parent) {
                $tree .= "\t<option ";
                $tree .= "value='" . $cate['cate_id'] . "'";
                if ($cate['cate_id'] == $sl_cate)
                    $tree .= ' selected="selected"';
                $tree .= ">";
                $tree .= $space . ' ' . $cate['cate_name'];
                $tree .= "</option>\n";
                $tree .= $this->_cate_select_box($category, $sl_cate, $cate['cate_id'], $space . '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;');
            }
        }
        return $tree;
    }

    function search() {
        $this->load->library('pagination');

        $offset = $this->input->get('offset', 0);
        $limit = 20;

        $search = array();
        $where = array();
        if ($this->input->get('s') != '')
            $search['album_name'] = $this->input->get('s');

        $url = current_url() . "?s=" . $search['album_name'];
        $config = array();
        $config['base_url'] = $url;
        $config['total_rows'] = count($this->m_album->search($search, $where));
        $config['per_page'] = 20;
        $config['page_query_string'] = TRUE;
        $config['query_string_segment'] = 'offset';
        $config['first_link'] = 'Trang đầu';
        $config['last_link'] = 'Trang cuối';

        $this->pagination->initialize($config);
        $this->set_var('paging', $this->pagination->create_links());

        $this->_plugins[] = "jquery_ui/js";
        $this->_plugins[] = "jquery_ui/css/Aristo";

        $this->set_var('items', $this->m_album->search($search, $where, '', $limit, $offset));
        $this->set_var('category', $this->m_album_category->multi_select());
        $this->set_var('title', 'Tìm kiếm');
        $this->view('album/index');
    }

    function up_hot($id = FALSE) {
        if (!$id)
            redirect('album');

        $item = $this->m_album->select_one(array('album.album_id' => $id));

        if (!$item)
            redirect('album');

        if ($item['album_rank'] == 0)
            $this->m_album->update(array('album.album_id' => $id), array('album_rank' => 1));
        else
            $this->m_album->update(array('album.album_id' => $id), array('album_rank' => 0));

        redirect('album');
    }

    function sort_hot() {
        $rank_array = $this->input->post('rank');

        $rank_array = explode(',', $rank_array);

        $new_array = array();
        if (empty($rank_array))
            exit('ERROR');

        foreach ($rank_array as $rank => $id) {
            if ($id == '')
                continue;

            $new_array[] = $id;
        }

        if (empty($new_array))
            exit('ERROR');

        $total = count($new_array);
        foreach ($new_array as $rank => $id)
            if (!$this->m_album->update(array('album.album_id' => $id), array('album_rank' => $total - $rank)))
                exit('ERROR');
    }

    function form($id = FALSE) {
        $this->load->helper('number');
        $this->set_var('title', 'Tạo album ảnh');
        if ($id)
            $this->set_var('title', 'Sửa album ảnh');

        $item = $this->m_album->select_one(array('album.album_id' => $id));
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');

        $this->form_validation->set_rules('album_name', 'Tên album', 'required');
        $this->form_validation->set_rules('album_cate', 'Danh mục album', 'required');
        $this->form_validation->set_rules('album_sumary', 'Tóm tắt Album', 'required');
        $this->form_validation->set_rules('album_name_url', 'URL', "required|callback_check_album[$id]");
        $this->form_validation->set_rules('album_seo', 'SEO', 'required');
        $this->form_validation->set_rules('album_status', 'Trạng thái', 'required');
        $this->form_validation->set_rules('album_rank', 'Thứ tự', 'required');

        if ($this->input->post()) {
            if ($this->form_validation->run() == FALSE)
                _jsonout(FALSE, 'custom', validation_errors('<h4 class="alert_error">', '</h4>'));
            else
                $this->_save($id);
        }
        $this->_plugins[] = "jquery_ui/js";
        $this->_plugins[] = "jquery_ui/css/Aristo";
        $this->_plugins[] = "jquery_form";
        $this->_plugins[] = "tooltip";
        $this->_js[] = "upload";

        $this->set_var('item', $item);
        $category = $this->m_album_category->multi_select();
        $album_cate = $this->m_album_category_relation->multi_select(array('album_id' => $id));
        $in_cate = array();
        if ($album_cate) {
            foreach ($album_cate as $ac) {
                $in_cate[] = $ac['cate_id'];
            }
        }
        $this->set_var('cate_tree', $this->_cate_tree($category, 'input', $in_cate));
        $this->set_var('in_cate', $in_cate);
        $this->set_var('photos', $this->m_album_photo->multi_select(array('album_id' => $id), 'photo_rank'));
        $this->set_var('id', $id);

        $this->view('album/form');
    }

    function check_album($url, $id = 0) {
        $app = $this->m_album->select_one(array('album_name_url' => $url));
        if ($app != FALSE) {
            if ($app['album_id'] == $id)
                return TRUE;

            $this->form_validation->set_message('check_album', "%s $url đã được sử dụng trong một album khác.");
            return FALSE;
        }
        else {
            return TRUE;
        }
    }

    function upload_photo() {
        $this->load->helper('number');
        $config = array();
        $icon_dir = 'assets/upload/photo/';
        $config['upload_path'] = $icon_dir;
        $config['allowed_types'] = 'png|jpg|gif|PNG|JPG|GIF';
        $config['max_size'] = '10000';
        $config['max_width'] = '10000';
        $config['max_height'] = '10000';

        $this->load->library('upload', $config);

        if ($this->upload->do_upload()) {
            $data = $this->upload->data();
            $img = $icon_dir . $data['file_name'];
            $img_url = base_url() . $icon_dir . $data['file_name'];
            $name = time();
            $desc = $this->input->post('photo_desc');

            $data_out = "<tr id='photo_$name' class='newphoto'>";
            $data_out .= "<td>";
            $data_out .= "<img src='$img_url' style='max-height:128px;max-width:128px'/>";
            $data_out .= "<input type='hidden' value='$img' name='photo[$name][photo_file]'/>";
            $data_out .= "<input type='hidden' value='0' id='photo_rank_photo_$name' name='photo[$name][photo_rank]'/>";
            $data_out .= "</td>";
            $data_out .= "<td>";
            $data_out .= byte_format($data['file_size'] * 1024);
            $data_out .= "<input type='hidden' value='" . $data['file_size'] * 1024 . "' name='photo[$name][photo_size]'/>";
            $data_out .= "</td>";
            $data_out .= "<td>";
            $data_out .= "<textarea rows='5' style='width:80%' name='photo[$name][photo_desc]'>$desc</textarea>";
            $data_out .= "</td>";
            $data_out .= "<td>";
            $data_out .= "<a href='#' onclick='if(confirm(\"Bạn có chắc là muốn xóa phần tử này không?\")) $(\"#photo_$name\").remove(); return false;'>Xóa</a>";
            $data_out .= "</td>";
            $data_out .= "<td>";
            $data_out .= "<a href='#' title='lên trên' onclick='return photo_up($(this))'>lên</a>";
            $data_out .= "| <a href='#' title='xuống dưới'  onclick='return photo_down($(this))'>xuống</a>";
            $data_out .= "</td>";
            $data_out .= "</tr>";

            _jsonout(TRUE, "<h3 class='alert_success'>Upload thành công!<h3/>", $data_out);
        }
        else
            _jsonout(FALSE, "<h3 class='alert_error'>" . $this->upload->display_errors() . "<h3/>");
    }

    function upload_thumb() {
        $config = array();
        $icon_dir = 'assets/upload/photo/';
        $config['upload_path'] = $icon_dir;
        $config['allowed_types'] = 'png|jpg|gif|PNG|JPG|GIF';
        $config['max_size'] = '10000';
        $config['max_width'] = '10000';
        $config['max_height'] = '10000';

        $this->load->library('upload', $config);

        if ($this->upload->do_upload()) {
            $data = $this->upload->data();
            $img = $icon_dir . $data['file_name'];
            $img_url = base_url() . $icon_dir . $data['file_name'];
            $data_out = "<span>";
            $data_out .= "<img src='$img_url' style='max-height:128px;max-width:128px'/>";
            $data_out .= "<input type='hidden' value='$img' name='thumb'/>";
            $data_out .= "</span>";
            _jsonout(TRUE, "<h3 class='alert_success'>Upload thành công!<h3/>", $data_out);
        }
        else
            _jsonout(FALSE, "<h3 class='alert_error'>" . $this->upload->display_errors() . "<h3/>");
    }

    private function _save($id = FALSE) {
        $data = array();
        $data['album_name'] = trim($this->input->post('album_name'));
        $data['album_name_url'] = trim($this->input->post('album_name_url'));
        $data['album_sumary'] = trim($this->input->post('album_sumary'));
        $data['album_desc'] = trim($this->input->post('album_desc'));
        $data['album_seo'] = trim($this->input->post('album_seo'));
        $data['album_price'] = trim($this->input->post('album_price'));
        $data['album_thumb'] = trim($this->input->post('album_thumb'));
        $data['album_rank'] = intval($this->input->post('album_rank'));
        $data['album_status'] = intval($this->input->post('album_status'));
        $data['album_eid'] = $this->input->post('album_eid');
        $data['album_vote_total'] = $this->input->post('album_vote_total');
        $data['album_vote_star'] = $this->input->post('album_vote_star');
        $data['album_updated_at'] = time();
        $data['album_updated_by'] = $this->session->userdata('u_name');

        // Nếu có up ảnh thumbnail mới
        if ($this->input->post('thumb') != '')
            $data['album_thumb'] = $this->_save_photo(array($this->input->post('thumb')), TRUE, ALBUM_DIR);

        $data_file = $this->input->post('photo');
        $data_cate = $this->input->post('album_cate');
        $photo_del = @$this->input->post('photo_del', TRUE);
        if ($id) {
            if ($this->m_album->update(array('album_id' => $id), $data)) {
                // Cập nhật thông tin vào GraphDB
                $gphdata['ita'] = 'create';
                $gphdata['itt'] = 'ALBUM';
                $gphdata['ite'] = $data['album_eid'];
                $gphdata['itn'] = $data['album_name'];
                $gphdata['ads'] = $data['album_desc'];
                $gphdata['ipr'] = $data['album_price'];
                $gphdata['ith'] = $data['album_thumb'];
                $gphdata['ips'] = $data['album_status'];
                $this->graph_update($gphdata);

//                $solr_data = $this->solr_data_from_post_data($data);
//                $this->solr_update($id, $solr_data);
                try {
                    $this->_save_file($id, $data_file, $data['album_eid']);
//                    $this->_save_crawler_file($id, $data['album_eid']);
                    $this->_save_cate($id, $data_cate);
                    $this->_del_file($photo_del);
                } catch (Exception $exc) {
                    _jsonout(TRUE, 'error', $exc->getTraceAsString());
                }

                if ($this->input->post('crawler'))
                    _jsonout(TRUE, 'crawler', $id);

                _jsonout(TRUE, 'success', "Cập nhật album thành công!");
            }
            else
                _jsonout(FALSE, 'error', "Không cập nhật được album!");
        }

        $data['album_eid'] = $this->__getEid();
        $data['album_created_at'] = time();
        $data['album_created_by'] = $this->session->userdata('u_name');
        $data['album_fake_downloads'] = rand(APP_MIN_FAKE_DOWNLOADS, APP_MAX_FAKE_DOWNLOADS);
        $insert_id = $this->m_album->insert($data);
//        $solr_data = $this->solr_data_from_post_data($data);
//        $this->solr_update($insert_id, $solr_data);
        if ($insert_id) {
            // Cập nhật thông tin vào GraphDB
            $gphdata['ita'] = 'create';
            $gphdata['itt'] = 'ALBUM';
            $gphdata['ite'] = $data['album_eid'];
            $gphdata['itn'] = $data['album_name'];
            $gphdata['ads'] = $data['album_desc'];
            $gphdata['ipr'] = $data['album_price'];
            $gphdata['ith'] = $data['album_thumb'];
            $gphdata['ips'] = $data['album_status'];
            $this->graph_update($gphdata);

            try {
//                $this->_save_crawler_file($insert_id, $data['album_eid']);
                $this->_save_file($insert_id, $data_file, $data['album_eid']);
                $this->_save_cate($insert_id, $data_cate);
            } catch (Exception $exc) {
                _jsonout(FALSE, 'error', $exc->getTraceAsString());
            }

//            if ($this->input->post('crawler'))
            _jsonout(TRUE, 'crawler', $insert_id);
//            _jsonout(TRUE, 'success', "Tạo album thành công!");
        }
        else
            _jsonout(FALSE, 'error', "Không tạo được album!");
    }

    private function _del_file($photo_del) {
        if (!empty($photo_del))
            foreach ($photo_del as $photo_id) {
                $photo = $this->m_album_photo->select_one(array('photo_id' => $photo_id));
                if (file_exists($photo['photo_file'])) {
                    $path_parts = pathinfo($photo['photo_file']);
                    if (is_dir($path_parts['dirname'])) {
                        $this->load->helper('file');
                        delete_files($path_parts['dirname'], TRUE);
                        rmdir($path_parts['dirname']);
                    }
                }

                if ($this->m_album_photo->delete(array('photo_id' => $photo_id))) {
                    $gphdata['ita'] = 'delete';
                    $gphdata['itt'] = 'PHOTO';
                    $gphdata['ite'] = $photo['photo_eid'];
                    $this->graph_update($gphdata);
                }
            }
    }

    private function _save_file($album_id, $data_file, $album_eid) {
        if (!$album_id)
            return;

        if (empty($data_file))
            return;

        $photo_index = 0;
        foreach ($data_file as $row) {
            if (!$row['photo_file'])
                continue;

            $photo_index++;

            $sphoto_dir = '/' . date('Y/md', time());
            $today_dir = ALBUM_DIR . $sphoto_dir;

            if (!is_dir($today_dir))
                mkdir($today_dir, 0777, TRUE);

            $photo_file = '';
            if (isset($row['photo_file']) && $row['photo_file'] != '') {
                $photo_file = $row['photo_file'];
                if (file_exists($photo_file)) {
                    if (!file_exists($today_dir . '/' . basename($photo_file)))
                        rename($photo_file, $today_dir . '/' . basename($photo_file));

                    $photo_file = $sphoto_dir . '/' . basename($photo_file);
                }
                else
                    $photo_file = '';
            }

            $data = array(
                'album_id' => $album_id,
                'photo_size' => isset($row['photo_size']) ? $row['photo_size'] : '',
                'photo_desc' => isset($row['photo_desc']) ? $row['photo_desc'] : '',
                'photo_rank' => isset($row['photo_rank']) ? $row['photo_rank'] : 0,
                'photo_updated' => time(),
                'photo_status' => 1,
            );

            if ($photo_file != '')
                $data['photo_file'] = nice_url($photo_file);

            if (isset($row['photo_id'])) {
                $photo = $this->m_album_photo->select_one(array('photo_id' => $row['photo_id']));
                if ($this->m_album_photo->update(array('photo_id' => $row['photo_id']), $data)) {
                    // Cập nhật thông tin vào GraphDB
                    $gphdata['ita'] = 'create';
                    $gphdata['itt'] = 'PHOTO';
                    $gphdata['ite'] = $photo['photo_eid'];
                    $gphdata['aid'] = $album_eid;
//                    $gphdata['itn'] = $data['photo_desc'];
                    $gphdata['pds'] = $data['photo_desc'];
                    $gphdata['api'] = $photo_index;
//                    $gphdata['ipr'] = $data['album_price'];
                    if (isset($data['photo_file']))
                        $gphdata['ipt'] = $data['photo_file'];
                    $gphdata['ips'] = $data['photo_status'];
                    $this->graph_update($gphdata);
                }
            }
            else {
                $data['photo_eid'] = $this->__getEid();
                $data['photo_created'] = time();
                if ($this->m_album_photo->insert($data)) {
                    // Cập nhật thông tin vào GraphDB
                    $gphdata['ita'] = 'create';
                    $gphdata['itt'] = 'PHOTO';
                    $gphdata['ite'] = $data['photo_eid'];
                    $gphdata['aid'] = $album_eid;
                    $gphdata['api'] = $album_id;
//                    $gphdata['itn'] = $data['photo_desc'];
                    $gphdata['pds'] = $data['photo_desc'];
//                    $gphdata['ipr'] = $data['album_price'];
                    if (isset($data['photo_file']))
                        $gphdata['ipt'] = $data['photo_file'];
                    $gphdata['ips'] = $data['photo_status'];
                    $this->graph_update($gphdata);
                }
            }
        }
    }

    private function _save_cate($album_id, $cate_arr) {
        if ($album_id)
            if (!empty($cate_arr)) {
                $this->m_album_category_relation->delete(array('album_id' => $album_id));

                foreach ($cate_arr as $cate)
                    $this->m_album_category_relation->insert(array('album_id' => $album_id, 'cate_id' => $cate));
            }
    }

    public function delete($id = FALSE) {
        if (!$id)
            show_404();

        $album = $this->m_album->select_one(array('album.album_id' => $id));
        if ($this->m_album->delete(array('album.album_id' => $id))) {
            $gphdata['ita'] = 'delete';
            $gphdata['itt'] = 'PHOTO';
            $gphdata['ite'] = $album['album_eid'];
            $this->graph_update($gphdata);
        }

        $photos = $this->m_album_photo->multi_select(array('album_photo.album_id' => $id));
        if ($photos)
            foreach ($photos as $photo) {
                $gphdata['ita'] = 'delete';
                $gphdata['itt'] = 'PHOTO';
                $gphdata['ite'] = $photo['photo_eid'];
                $this->graph_update($gphdata);
            }

        $this->m_album_photo->delete(array('album_photo.album_id' => $id));

        $this->m_album_category_relation->delete(array('album_category_relation.album_id' => $id));
        redirect("album/index/$id");
    }

    /**
     * Hàm in ra ảnh từ một đường dẫn ảnh không công khai
     * @param string $url_encode: URL ảnh truyền vào
     * @return imageContent Trả về dữ liệu ảnh, có thể hiển thị được trên trình duyệt
     */
    function gate($url_encode) {
        $this->load->helper('file');

        // Decode URL 3 lần để ra được đường dẫn tới ảnh
        $url = urldecode(urldecode(urldecode($url_encode)));
        $url = ALBUM_DIR . '/' . $url;

        // Nếu file tồn tại thì tiếp tục
        if (file_exists($url)) {
            header('filename=' . basename($url));
            $mime = get_mime_by_extension($url);
            header("Content-type: $mime");

            // Đọc nội dung ảnh và in ra trình duyệt
            print file_get_contents($url);
        }
    }

    /**
     * Hàm lấy ảnh từ một URL bài viết và hiển thị danh sách ảnh ra trình duyệt
     * @return fale: Nếu URL không chính xác
     */
    function crawler() {
        $url = prep_url($this->input->post('url'));

        if ($url == '' OR filter_var($url, FILTER_VALIDATE_URL) == FALSE) {
            echo "URL không chính xác, bạn vui lòng thử lại";
            return FALSE;
        }

        $html = $this->__getContent($url, null, 'GET', true);
        if ($html == '') {
            echo "<script>alert('Không lấy được nội dung trang web, bạn vui lòng kiểm tra lại hoặc chọn URL khác.')</script>";
            die;
        }

        /**
         * TH1. Các ảnh tuyệt đối (có http:// ở đầu, có .png, .gif, .jpg ở cuối)
         */
        $imageUrlArray = array();
        preg_match_all('!http://[a-z0-9\-\.\/]+\.(?:jpe?g|png|gif)!Ui', $html, $imageUrlArray);

        if (is_array($imageUrlArray)) {
            $imageUrlArray = $imageUrlArray[0];
            if (!empty($imageUrlArray)) {
                // Hiển thị danh sách url ảnh tìm được ra ngoài trình duyệt
                foreach ($imageUrlArray as $imageUrl) {
                    $this->load->view('default/album/crawler', array(
                        'url' => $imageUrl,
                    ));
                }
            }
        }

        $res = preg_match_all('/<img[^>]*>/Ui', $html, $matches);
        foreach ($matches[0] as $img_tag) {
            $pattern = '/src=\"\S*\"/Ui';
            $res = preg_match_all($pattern, $img_tag, $src);
            var_dump($src);
        }

        /**
         * TH2. Trường hợp các ảnh có link tương đối nằm trong thẻ <img ...>
         */
        $parse = parse_url($url);
        $baseUrl = $parse['scheme'] . '://' . $parse['host']; // Lấy thông tin domain từ url hiện tại
        libxml_use_internal_errors(true);

        // Xử lý DOM
        $dom = new domDocument;
        $dom->loadHTML($html);
        $dom->preserveWhiteSpace = false;

        // Lấy các phần tử DOM có thẻ là img
        $images = $dom->getElementsByTagName('img');
        foreach ($images as $image) {
            $src = $image->getAttribute('src');
            // Kiểm tra nếu URL đã lấy trong TH1 rồi thì bỏ qua
            if (in_array($src, $imageUrlArray))
                continue;

            // Kiểm tra ảnh nếu không có http thì thêm vào
            $fullUrl = (strpos($src, "http://") !== FALSE OR strpos($src, "https://") !== FALSE) ? $src : $baseUrl . $src;

            // Show ảnh ra trình duyệt
            $this->load->view('default/album/crawler', array(
                'url' => $fullUrl,
            ));
        }
    }

    /**
     * Hàm xử lý AJAX gọi lên để lưu file
     * 
     * @param intege $album_id
     * @return intege
     */
    public function save_crawler_file() {
        $album_id = $this->input->post('album_id');
        if (!$album_id)
            return;
        $album = $this->m_album->select_one(array('album.album_id' => $album_id));

        if (!$album)
            return;

        $file = $this->input->post('file');
        $desc = $this->input->post('desc');
        $rank = $this->input->post('rank', 0);
        if (!$file)
            return;

        $sphoto_dir = '/' . date('Y/md', time());
        $today_dir = ALBUM_DIR . $sphoto_dir;

        if (!is_dir($today_dir))
            @mkdir($today_dir, 0777, TRUE);

        if (copy($file, $today_dir . '/' . basename($file))) {
            $filezie = @filesize($today_dir . '/' . basename($file));
            $photo_file = $sphoto_dir . '/' . basename($file);

            $data = array(
                'album_id' => $album_id,
                'photo_size' => $filezie,
                'photo_desc' => isset($desc) ? $desc : '',
                'photo_rank' => isset($rank) ? $rank : 0,
                'photo_updated' => time(),
                'photo_status' => 1,
            );

            if ($photo_file != '')
                $data['photo_file'] = nice_url($photo_file);

            $data['photo_eid'] = $this->__getEid();
            $data['photo_created'] = time();
            if ($this->m_album_photo->insert($data)) {
                // Cập nhật thông tin vào GraphDB
                $gphdata['ita'] = 'create';
                $gphdata['itt'] = 'PHOTO';
                $gphdata['ite'] = @$data['photo_eid'];
                $gphdata['aid'] = $album['album_eid'];
                $gphdata['api'] = $album_id;
//                    $gphdata['itn'] = $data['photo_desc'];
                $gphdata['pds'] = $data['photo_desc'];
//                    $gphdata['ipr'] = $data['album_price'];
                if (isset($data['photo_file']))
                    $gphdata['ipt'] = $data['photo_file'];
                $gphdata['ips'] = $data['photo_status'];
                $this->graph_update($gphdata);

                $this->m_album->update(array('album_id' => $album_id), array('album_thumb' => $data['photo_file']));
                _jsonout(TRUE, $this->input->post('id'), "<div style='color:green'>Crawl ảnh thành công!</div>");
            }
        }
        else
            _jsonout(FALSE, $this->input->post('id'), "Không crawl được ảnh này!");
    }

}

/** 
 * End file album
 */
